﻿using LxBasic;

namespace LxLESS
{
    public interface IZoneIteration : IZoneAMGIteration, IZoneBiCGStabIteration, IZoneJacobiIteration, IZoneExplicitIteration, ICalResidual
    {
        LESSZone GetLessZone();
        bool IsSymmetric();
    }
    public interface IZoneAMGIteration
    {
        void AMGIte_Restrict_Are(ThreadInfo threadInfo);
        void AMGIte_Restrict_re(ThreadInfo threadInfo);
        void AMGIte_ReceiveProlong(ThreadInfo threadInfo);
    }
    public interface IZoneExplicitIteration
    {
        void ExplicitIterate_Step1(ThreadInfo threadInfo);
        void ExplicitIterate_Step2(ThreadInfo threadInfo);
    }
    public interface IZoneJacobiIteration
    {
        void JacobiIterate_Step1(ThreadInfo threadInfo);
        void JacobiIterate_Step2(ThreadInfo threadInfo);
    }
    public interface IZoneBiCGStabIteration
    {
        void BiCGStabIte_Ini_r_rho1(ThreadInfo threadInfo);
        void BiCGStabIte_Ini_r0_pArray_yArray(ThreadInfo threadInfo);
        void BiCGStabIte_vArray_alpha1(ThreadInfo threadInfo);
        void BiCGStabIte_sArray_zArray(ThreadInfo threadInfo);
        void BiCGStabIte_tArray_omega1(ThreadInfo threadInfo);
        void BiCGStabIte_xArray(ThreadInfo threadInfo);
        void BiCGStabIte_rArray_rho1(ThreadInfo threadInfo);
        void BiCGStabIte_pArray_yArray(ThreadInfo threadInfo);
    }
}
